package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

//单向管道：只能写
func producer(ch chan<- int){
	defer wg.Done()
	for i := 0; i < 10; i++ {
		time.Sleep(time.Second)
		ch <- i
		fmt.Println("生产了消息：",i)
	}
	close(ch)
}
//单向管道：只能读
func consumer(ch <-chan int){
	defer wg.Done()
	//第一种循环取管道的值
	// for i := 0; i < 10; i++ {
	// 	fmt.Println("消费了消息：",<-ch)
	// }

	//第二种循环取管道的值
	// for {
	// 	v,ok := <-ch
	// 	if !ok {
	// 		fmt.Println("通道已关闭")
	// 		break
	// 	}
	// 	fmt.Println("消费了::",v)
	// }

	//第三种循环取管道的值
	for i := range ch{
		fmt.Println("消费了::",i)
	}
}

func main(){
	ch := make(chan int,10)
	wg.Add(2)
	go producer(ch)
	go consumer(ch)
	wg.Wait()
	fmt.Println("process end")
}